package com.ssh.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.criterion.DetachedCriteria;

/**
 * 通用 DAO 设计接口
 * 
 * @author wancg
 * 
 */
public interface GenericDAO<T> {

	/**
	 * 保存
	 * 
	 * @param obj
	 */
	public void save(T obj);

	/**
	 * 修改
	 * 
	 * @param obj
	 */
	public void update(T obj);

	/**
	 * 删除
	 * 
	 * @param obj
	 */
	public void delete(T obj);

	/**
	 * 根据id 查询
	 * 
	 * @param id
	 * @return
	 */
	public T findById(Serializable id);

	/**
	 * 查询 所有数据
	 * 
	 * @return
	 */
	public List<T> findAll();

	/**
	 * 条件查询
	 */
	/**
	 * 命名查询可以使用特定条件
	 */
	public List<T> findByNamedQuery(String queryName, Object... values); // 根据hql 查询
	
	/**
	 * 条件查询
	 * 参照DetachedCriteria使用
	 */
	public List<T> findByCriteria(DetachedCriteria detachedCriteria); // 面向对象条件查询
	/**
	 * hibernateTemplete分页
	 * @param hql 分页语句
	 * @param off 第一条记录从0开始
	 * @param length 第一条开始查询多少条记录
	 * @return 
	 */
	public List<T> getlListForPage(final String strQuery,final int off,final int length);
	/**
	 * hibernateTemplete批量插入
	 * @param array
	 * @return
	 */
	public <T> int batchSave(final List<T> list,final int BATCH_MAX_ROW);
	/**
	 * 通过sql查询
	 * @param sql
	 * @return
	 */
	public List<T> getlListForSQL(final String sql);
	/**
	 * 通过sql插入更新
	 * @param sql
	 * @return
	 */
	public int getlListForSQL2(final String sql);
}
